<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/**
 * Member Score model
 * model สำหรับ score , จิตพิสัย
 * @package Member
 * @subpackage Model
 * @category Group
 */
class Score_m extends MY_Model {

    /**
     * ชื่อ table log score
     * @var string $score_log ชื่อ table log score
     */
    private $score_log = 'score_log';

    /**
     * ชื่อ table summary score
     * @var string $score_sum ชื่อ table summary score
     */
    private $score_sum = 'score_sum';

    /**
     * ชื่อ table log karma
     * @var string $karma_log ชื่อ table log karma
     */
    private $karma_log = 'karma_log';

    /**
     * ชื่อ table summary karma
     * @var string $karma_sum ชื่อ table karma score
     */
    private $karma_sum = 'karma_sum';
    
    function __construct() {
        parent::__construct();
    }

    /**
     * ปรับปรุงคะแนน
     * เพิ่มคะแนน หรือลดคะแนน
     *
     * @param int $userid userid
     * @param int $score คะแนน ใส่เครื่องหมาย + หรือ -
     * @param string $reason เหตุผลสำหรับการปรับปรุงคะแนน
     * @param string $type เป็น score หรือ karma
     * @return int ว่าสามารถปรับปรุงคะแนนได้หรือไม่
     */
    function take_score($userid, $score, $reason, $type='score') {
        if($type == 'score'){
            $table_log = $this->score_log;
            $table_sum = $this->score_sum;
        } else {
            $table_log = $this->karma_log;
            $table_sum = $this->karma_sum;
        }
        $s = 'INSERT INTO ' . $table_log . ' SET userid=' . $userid . ',score=' . $score . ',reason=\'' . mysql_real_escape_string($reason) . '\',createdate=NOW()';
        $s = mysql_query($s);
        //เช็คก่อน ว่ามี record หรือยัง
        $user_score = $this->load_score($userid,$type);
        $score_temp = sizeof($user_score);
        if ($score_temp) {
            $s = 'UPDATE ' . $table_sum . ' SET score = score + ' . $score . ',lastupdate = NOW() WHERE userid=' . $userid . '';
            $s = mysql_query($s);
            if($type=='karma') $this->_check_ban_karma($userid);
            return mysql_affected_rows();
        } else {
            //ถ้ายังไม่มีให้สร้างขึ้นมาใหม่
            $s = 'INSERT INTO ' . $table_sum . ' SET score = ' . $score . ',lastupdate = NOW(), userid=' . $userid . '';
            $s = mysql_query($s);
            return mysql_affected_rows();
        }
    }


    /**
     * เรียกคะแนนของ user
     * เรียกว่าปัจจุบันมีคะแนนเท่าไร และ update ล่าสุดเมื่อไร
     *
     * @param int $userid userid
     * @return array [score][lastupdate]ว่ามีคะแนนเท่าไร
     */
    function load_score($userid,$type = 'score') {
        if($type == 'score'){
            $table_sum = $this->score_sum;
        } else {
            $table_sum = $this->karma_sum;
        }
        $q = 'SELECT score,lastupdate FROM ' . $table_sum . ' WHERE userid= ' . $userid . '';
        $q = mysql_query($q);
        if (mysql_num_rows($q) == 1) {
            return mysql_fetch_assoc($q);
        } else {
            return null;
        }
    }

    /**
     * เรียก log คะแนนขึ้นมาแสดงผล
     *
     * @param int $userid userid
     * @param int $limit จำนวนข้อมูลที่ต้องการแสดงผล
     * @param int $start start row
     * @param string $sort DESC,ASC
     */
    function load_log($userid, $limit = 20,$start=0,$sort="DESC",$type = 'score'){
        if($type == 'score'){
            $table_log = $this->score_log;
        } else {
            $table_log = $this->karma_log;
        }
        $s = 'SELECT * FROM '.$table_log.' WHERE userid='.$userid.' ORDER BY id '.$sort.' LIMIT '.$start.','.$limit.' ';
        return $this->multiplerow($s);

    }

    /**
     * load คะแนนของทุกคนในระบบ
     *
     * @param string $type score|karma
     * @return int summary system score
     * @todo cache result
     */
    function load_sum_member_score($type = 'score'){

        if($type == 'score'){
            $table_sum = $this->score_sum;
        } else {
            $table_sum = $this->karma_sum;
        }
        $s = 'SELECT sum(score) as score FROM '.$table_sum.'';
        return $this->singlevalue($s, 'score');

    }


    function countScoreUser($userid,$type = 'score'){
        if($type == 'score'){
            $table_log = $this->score_log;
        } else {
            $table_log = $this->karma_log;
        }
        $s = sprintf('SELECT COUNT(*) as cnt FROM %s WHERE userid=%u'
                ,$this->score_log
                ,$userid);
        return $this->singlevalue($s, 'cnt');
    }

    function _check_ban_karma($userid){
        $this->load->config('tank_auth', TRUE);
        $karma_lower = $this->config->item('karma_lower', 'tank_auth');
        $score = $this->load_score($userid,'karma');
        if(intval($score['score']) < $karma_lower){
            //ban this user
            $s = 'UPDATE mem_system SET ban=1,banreason =\'lower karma\'';
            $this->singleupdate($s);
        } 
        
    }


}
